public class code1s {
//    力扣 150
    // 深度优先搜索算法实现
public boolean hasPathSum(TreeNode root, int targetSum) {
    // 这道题目的要求是，要求深入树节点，获取子树在一定深度上的数之和 和 targetSum 的值符合
    // 这道题目最先能想到的就是深度优先搜索
    // 通过 递归 的方法实现判断

    if (root == null) {
        return false;
    }

    // 实现一个方法通过深度优先搜索来获取适合的目标值
    boolean re = getRe(root, targetSum, root.val);
    return re;
}

    // 这里传入节点的值，目的是为了方便后面计算各个节点的值的加和
    public boolean getRe(TreeNode root, int target, int sum) {
        // 如果当前节点为 null 此时返回 false
        if(root == null) {
            return false;
        }

        // 如果当前节点的路径和 sum 和 target 目标值相等。 并且当前节点为叶子节点(该节点的左右子树都为 null) ，此时返回 true
        if(sum == target && root.left == null && root.right == null) {
            return true;
        }
        // 初始化左右子树的标志位 为 false
        boolean leftFlag = false;
        boolean rightFlag = false;

        // 判断左子树的情况进行递归操作
        if(root.left != null) {
            // 根据上面的条件判断在左侧是否有符合条件的节点
            leftFlag = getRe(root.left, target, sum + root.left.val);
        }

        // 判断右子树的情况进行递归
        if(root.right != null) {
            // 同理根据上面条件判断右侧是否有符合条件的节点
            rightFlag = getRe(root.right, target, sum + root.right.val);
        }

        // 针对左右子树路径的中，判断是否有合适的路径
        return leftFlag || rightFlag;
    }
}
